Bug 270

Bug Description:

This is a deadlock.
The following is an example of deadlock thread dump:

"Thread2": waiting to lock monitor 0x00000000076cf768 (object 0x00000000eb99b778, 
a org.apache.commons.dbcp.PoolableConnection), which is held by "Thread1"
"Thread1": waiting to lock monitor 0x000000000627a360 (object 0x00000000eb913d50, a
org.apache.commons.pool.impl.GenericObjectPool), which is held by "Thread2"

Java stack information for the threads listed above:
===================================================
Thread1:
at org.apache.commons.pool.impl.GenericObjectPool.addObjectToPool(GenericObjectPool.java:872)
- waiting to lock <0x00000000eb911858> (a org.apache.commons.pool.impl.GenericObjectPool) at org.apache.commons.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:854) at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:80) - locked <0x00000000eb9b7898> (a org.apache.commons.dbcp.PoolableConnection) at Dbcp270$Thread1.run(Dbcp270.java:47) Thread2: at org.apache.commons.dbcp.AbandonedTrace.addTrace(AbandonedTrace.java:173) - waiting to lock <0x00000000eb9b7898> (a org.apache.commons.dbcp.PoolableConnection) at org.apache.commons.dbcp.AbandonedTrace.init(AbandonedTrace.java:89) at org.apache.commons.dbcp.AbandonedTrace.(AbandonedTrace.java:79) at org.apache.commons.dbcp.DelegatingStatement.(DelegatingStatement.java:60) at org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:161) at org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:327) at org.apache.commons.dbcp.PoolableConnectionFactory.validateObject (PoolableConnectionFactory.java:308) at org.apache.commons.pool.impl.GenericObjectPool.evict -locked <0x00000000eb911858> (a org.apache.commons.pool.impl.GenericObjectPool) at Dbcp270$Thread2.run(Dbcp270.java:67)
More details about this bug are at DBCP-270 JIRA page.

How To Reproduce:

This bug is reproduced under dbcp 1.2 and JDK 1.6.0_33.
Execute the following scripts to run the test to reproduce the bug (assume the location of the dbcp test project is dbcp_test_home).

Linux:
${dbcp_test_home}/scripts/270.sh [--monitoroff]
Windows:
%dbcp_test_home%\scripts\270.bat [--monitoroff]

Example: Use monitor to report and terminate the program when deadlock happens:
${dbcp_test_home}/scripts/270.sh


Turn off monitor:
${dbcp_test_home}/scripts/270.sh --monitoroff

Option Function
--monitoroff, -mo Turn off to stop reporting bug messages and ending program when test
runs into the expected concurrency bug which is a deadlock.
User has to terminate the program manually when this option is set.